// 1716. 计算力扣银行的钱
/**
 * @param {number} n
 * @return {number}
 */
// 暴力
var totalMoney = function (n) {
    let week = 1, day = 1, res = 0
    for (let i = 0; i < n; i++) {
        res += week + day - 1
        if (++day === 8) {
            day = 1
            ++week
        }
    }
    return res
}
// 等差数列优化
var totalMoney = function (n) {
    // 等差数列公式 An = A1 + d * (n - 1)
    // 等差数列求和公式: Sn = (A1 + An) * n / 2
    const week = Math.floor(n / 7) //整周数
    const day = n % 7 //不满一周的天数
    // 完整周
    const first = (1 + 7) * 7 / 2 // 第一个完整周存钱数
    const last = first + 7 * (week - 1) //最后一个完整周存钱数(等差数列)
    const s1 = (first + last) * week / 2 //完整周存钱总数(等差数列)

    // 非完整周
    const b1 = 1 + week //非完整中第一天
    const bd = b1 + 1 * (day - 1) //非完整周最后一天
    const s2 = (b1 + bd) * day / 2 //非完整周存钱总数
    return s1 + s2
};